﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using IAC_2013.com.iac.action;
using IAC_2013.com.iac.form;
using IAC_2013.com.iac.util;
using System.Text.RegularExpressions;

namespace IAC_2013.Controls
{
    public partial class ctrBaseUnit : UserControl
    {
        private MetroBillCommands _Commands;
        private DataTable tb;
        private BaseUnitAction baseAction;
        private BaseUnitForm frm;
        AutoCompleteStringCollection namesCollection = new AutoCompleteStringCollection();
        public ctrBaseUnit()
        {
            InitializeComponent();
            load_data();
        }

        private void load_data()
        { 
            tb = new DataTable();
            baseAction = new BaseUnitAction();
            frm = new BaseUnitForm();
            tb = baseAction.listBaseUnit(frm);
            grvBaseUnit.DataSource = tb;
        }

        private void btSearch_Click(object sender, EventArgs e)
        {
            tb = new DataTable();
            frm = new BaseUnitForm();
            baseAction = new BaseUnitAction();
            if (txtBaseCode.Text != null && !txtBaseCode.Text.Trim().Equals(""))
            {
                frm.baseUnitCode = txtBaseCode.Text;
            }
            if (txtBaseName.Text != null && !txtBaseName.Text.Trim().Equals(""))
            {
                frm.baseUnitName = txtBaseName.Text;
            }

            tb = baseAction.listBaseUnit(frm);
            grvBaseUnit.DataSource = tb;
        }

        private void btAdd_Click(object sender, EventArgs e)
        {
            
            frm = new BaseUnitForm();
            baseAction = new BaseUnitAction();

            frm.baseUnitCode = txtBaseCode.Text;
            frm.baseUnitName = txtBaseCode.Text;
            frm.baseUnitAddress = txtBaseAddress.Text;
            frm.taxtCode = txtTaxtCode.Text;
            frm.accountCode = txtAccount.Text;
            frm.bankName = txtBankName.Text;
            frm.phone = txtBasePhone.Text;
            frm.email = txtBaseEmail.Text;
            frm.website = txtBaseWebsite.Text;
            frm.warehouseCode = txtWarehouseCode.Text;
            frm.warehouseName = txtWareHouseName.Text;
            frm.warehouseAddress = txtWareHouseAddress.Text;
            frm.warehousePhone = txtWareHousePhone.Text;
            frm.warehouseFax = txtWareHouseFax.Text;
            Boolean checkCode = CommonUtils.checkCode("", txtBaseCode.Text, "ma_dvcs", "dvcs_don_vi_co_so", "add");
            Boolean checkWareHouseCode = CommonUtils.checkCode("", frm.warehouseCode, "ma_kho", "kho_hang", "add");

            if (txtBaseCode.Text == null || txtBaseCode.Text.Trim().Equals(""))
            {
                MessageBox.Show("Mã Đơn Vị Cơ Sở không được để trống!");
                txtBaseCode.Focus();
            }
            else if (txtBaseName.Text == null || txtBaseName.Text.Trim().Equals(""))
            {
                MessageBox.Show("Tên Đơn Vị Cơ Sở không được để trống!");
                txtBaseName.Focus();
            }
            else if (txtTaxtCode.Text == null || txtTaxtCode.Text.Trim().Equals(""))
            {
                MessageBox.Show("Mã số thuế không được để trống!");
            }
            else if (txtAccount.Text == null || txtAccount.Text.Trim().Equals(""))
            {
                MessageBox.Show("Số tài khoản không được để trống!");
            }
            else if (txtBaseName.Text == null || txtBaseName.Text.Trim().Equals(""))
            {
                MessageBox.Show("Tên Ngân Hàng Không được để trống!");
            }
            else if (frm.warehouseCode == null || frm.warehouseCode.Trim().Equals(""))
            {
                MessageBox.Show("Bạn chưa nhập Mã kho hàng!");
            }
            else if (frm.warehouseName == null || frm.warehouseName.Trim().Equals(""))
            {
                MessageBox.Show("Bạn chưa nhập Tên kho hàng!");
            }
            else if (checkCode == false)
            {
                MessageBox.Show("Mã Đơn Vị đã tồn tại vui lòng nhập mã khác!");
            }
            else if (checkWareHouseCode == false)
            {
                MessageBox.Show("Mã Kho hàng đã tồn tại vui lòng nhập mã khác!");
            }
            else
            {

                DialogResult result;
                result = MessageBox.Show("Bạn có chắc muốn ghi lại thông tin?", "Có/Không?", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                if (result == DialogResult.OK)
                {
                    Boolean add = baseAction.addBaseUnit(frm);
                    if (add == false)
                    {
                        MessageBox.Show("Ghi dữ liệu thất bại!");
                    }
                }
            }
            load_data();

        }

        private void btEdit_Click(object sender, EventArgs e)
        {
            frm = new BaseUnitForm();
            baseAction = new BaseUnitAction();
            
            if (baseUnitId.Text == null || baseUnitId.Text.Trim().Equals(""))
            {
                MessageBox.Show("Bạn phải chọn một đối tượng trước khi sửa!");
            }
            frm.baseUnitId = Int32.Parse(baseUnitId.Text);
            frm.baseUnitCode = txtBaseCode.Text;
            frm.baseUnitName = txtBaseCode.Text;
            frm.baseUnitAddress = txtBaseAddress.Text;
            frm.taxtCode = txtTaxtCode.Text;
            frm.accountCode = txtAccount.Text;
            frm.bankName = txtBankName.Text;
            frm.phone = txtBasePhone.Text;
            frm.email = txtBaseEmail.Text;
            frm.website = txtBaseWebsite.Text;

            if (txtBaseCode.Text == null || txtBaseCode.Text.Trim().Equals(""))
            {
                MessageBox.Show("Mã Đơn Vị Cơ Sở không được để trống!");
            }
            else if (txtBaseName.Text == null || txtBaseName.Text.Trim().Equals(""))
            {
                MessageBox.Show("Tên Đơn Vị Cơ Sở không được để trống!");
            }
            else if (txtTaxtCode.Text == null || txtTaxtCode.Text.Trim().Equals(""))
            {
                MessageBox.Show("Mã số thuế không được để trống!");
            }
            else if (txtAccount.Text == null || txtAccount.Text.Trim().Equals(""))
            {
                MessageBox.Show("Số tài khoản không được để trống!");
            }
            else if (txtBaseName.Text == null || txtBaseName.Text.Trim().Equals(""))
            {
                MessageBox.Show("Tên Ngân Hàng Không được để trống!");
            }

            Boolean checkCode = CommonUtils.checkCode(code.Text, txtBaseCode.Text, "ma_dvcs", "dvcs_don_vi_co_so", "edit");
            if (checkCode == false)
            {
                MessageBox.Show("Mã Đơn Vị đã tồn tại vui lòng nhập mã khác!");
            }
            Boolean checkTaxtCode = new ValidateUtils().checkNumber(txtTaxtCode.Text);
            Boolean checkAccount = new ValidateUtils().checkNumber(txtAccount.Text);
            Boolean checkPhone = true;
            Boolean checkEmail = true;
            if (txtBasePhone.Text != null && !txtBasePhone.Text.Trim().Equals(""))
            {
                checkPhone = new ValidateUtils().checkNumber(txtBasePhone.Text);
            }
            if (txtBaseEmail.Text != null && !txtBaseEmail.Text.Trim().Equals(""))
            {
                checkEmail = new ValidateUtils().checkEmail(txtBaseEmail.Text);
            }
            if (checkTaxtCode == false)
            {
                MessageBox.Show("Mã số thuế phải là kiểu dữ liệu số!");
            }
            else if (checkAccount == false)
            {
                MessageBox.Show("Số tài khoản phải là kiểu dữ liệu số!");
            }
            else if (txtBasePhone.Text != null && !txtBasePhone.Text.Trim().Equals("") && checkPhone == false)
            {
                MessageBox.Show("Số điện thoại phải là kiểu dữ liệu số!");
            }
            else if (txtBaseEmail.Text != null && !txtBaseEmail.Text.Trim().Equals("") && checkEmail == false)
            {
                MessageBox.Show("Email không đúng định dạng!");
            }

            DialogResult result;
            result = MessageBox.Show("Bạn có chắc muốn sửa lại thông tin?", "Có/Không?", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
            if (result == DialogResult.OK)
            {
                Boolean add = baseAction.editBaseUnit(frm);
                if (add == false)
                {
                    MessageBox.Show("Ghi dữ liệu thất bại!");
                }
            }
            load_data();
        }

        private void btDelete_Click(object sender, EventArgs e)
        {
            frm = new BaseUnitForm();
            baseAction = new BaseUnitAction();
            if (baseUnitId.Text == null || baseUnitId.Text.Trim().Equals(""))
            {
                MessageBox.Show("Bạn phải chọn một đối tượng trước khi xóa!");
            }
            frm.baseUnitId = Int32.Parse(baseUnitId.Text);
            DialogResult result;
            result = MessageBox.Show("Bạn có chắc muốn xóa thông tin này?", "Xóa/Không?", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
            if (result == DialogResult.OK)
            {
                Boolean delete = baseAction.deleteBaseUnit(frm);
                if (delete == false)
                {
                    MessageBox.Show("Xóa dữ liệu thất bại!");
                }
            }
            load_data();
        }

        public MetroBillCommands Commands
        {
            get { return _Commands; }
            set 
            {
                if (value != _Commands)
                {
                    MetroBillCommands oldValue = _Commands;
                    _Commands = value;
                    OnCommandChanged(oldValue, value);
                }
            }
        }

        public void OnCommandChanged(MetroBillCommands oldValue, MetroBillCommands newValue)
        {
            if (newValue != null)
            {
                btBack.Command = newValue.BaseUnit.Cancel;
            }
            else
            {
                btBack.Command = null;
            }
        }

        private void grvBaseUnit_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            int r = grvBaseUnit.CurrentCell.RowIndex;
            baseUnitId.Text = grvBaseUnit.Rows[r].Cells[0].Value.ToString();
            txtBaseCode.Text = grvBaseUnit.Rows[r].Cells[1].Value.ToString();
            txtBaseName.Text = grvBaseUnit.Rows[r].Cells[2].Value.ToString();
            txtBaseAddress.Text = grvBaseUnit.Rows[r].Cells[3].Value.ToString();
            txtTaxtCode.Text = grvBaseUnit.Rows[r].Cells[4].Value.ToString();
            txtAccount.Text = grvBaseUnit.Rows[r].Cells[5].Value.ToString();
            txtBankName.Text = grvBaseUnit.Rows[r].Cells[6].Value.ToString();
            txtBasePhone.Text = grvBaseUnit.Rows[r].Cells[7].Value.ToString();
            txtBaseEmail.Text = grvBaseUnit.Rows[r].Cells[8].Value.ToString();
            txtBaseWebsite.Text = grvBaseUnit.Rows[r].Cells[9].Value.ToString();
        }

        private void txtBaseEmail_TextChanged(object sender, EventArgs e)
        {
            Regex regex;
            regex = new Regex(@"\S+@\S+\.\S+");
            ErrorProvider errorProvider = new ErrorProvider();

            Control ctrl = (Control)sender;
            if (regex.IsMatch(ctrl.Text))
            {
                errorProvider.SetError(ctrl, "");
            }
            else
            {
                errorProvider.SetError(ctrl, "Không đúng kiểu định dạng Email!");
            }
        }

        private void btReset_Click(object sender, EventArgs e)
        {

        }

        private void txtWarhouseCode_TextChanged(object sender, EventArgs e)
        {
            namesCollection = CommonUtils.autoCompleted("kho_hang", "ma_kho");
            txtWarehouseCode.AutoCompleteMode = AutoCompleteMode.Suggest;
            txtWarehouseCode.AutoCompleteSource = AutoCompleteSource.CustomSource;
            txtWarehouseCode.AutoCompleteCustomSource = namesCollection;
        }

        private void txtWareHouseName_TextChanged(object sender, EventArgs e)
        {
            namesCollection = CommonUtils.autoCompleted("kho_hang", "ten_kho");
            txtWareHouseName.AutoCompleteMode = AutoCompleteMode.Suggest;
            txtWareHouseName.AutoCompleteSource = AutoCompleteSource.CustomSource;
            txtWareHouseName.AutoCompleteCustomSource = namesCollection;
        }

        private void txtWareHousePhone_TextChanged(object sender, EventArgs e)
        {
            txtWareHousePhone.Text = ValidateUtils.checkNum(txtWareHousePhone.Text);
        }

        private void txtWareHouseFax_TextChanged(object sender, EventArgs e)
        {
            txtWareHouseFax.Text = ValidateUtils.checkNum(txtWareHouseFax.Text);
        }

        private void txtBaseCode_TextChanged(object sender, EventArgs e)
        {
            namesCollection = CommonUtils.autoCompleted("dvcs_don_vi_co_so", "ma_dvcs");
            txtBaseCode.AutoCompleteMode = AutoCompleteMode.Suggest;
            txtBaseCode.AutoCompleteSource = AutoCompleteSource.CustomSource;
            txtBaseCode.AutoCompleteCustomSource = namesCollection;
        }

        private void txtBaseName_TextChanged(object sender, EventArgs e)
        {
            namesCollection = CommonUtils.autoCompleted("dvcs_don_vi_co_so", "ten_dvcs");
            txtBaseName.AutoCompleteMode = AutoCompleteMode.Suggest;
            txtBaseName.AutoCompleteSource = AutoCompleteSource.CustomSource;
            txtBaseName.AutoCompleteCustomSource = namesCollection;
        }

        private void txtBasePhone_TextChanged(object sender, EventArgs e)
        {
            txtBasePhone.Text = ValidateUtils.checkNum(txtBasePhone.Text);
        }

        private void txtBankName_TextChanged(object sender, EventArgs e)
        {
            namesCollection = CommonUtils.autoCompleted("dvcs_don_vi_co_so", "ten_ngan_hang_dvcs");
            txtBankName.AutoCompleteMode = AutoCompleteMode.Suggest;
            txtBankName.AutoCompleteSource = AutoCompleteSource.CustomSource;
            txtBankName.AutoCompleteCustomSource = namesCollection;
        }

        private void txtAccount_TextChanged(object sender, EventArgs e)
        {
            txtAccount.Text = ValidateUtils.checkNum(txtAccount.Text);
        }

        private void txtTaxtCode_TextChanged(object sender, EventArgs e)
        {
            txtTaxtCode.Text = ValidateUtils.checkNum(txtTaxtCode.Text);
        }
    }
}
